export default {
	namespaced: true,
	
	state: () => ({
		
		//购物车的数据，用来存储购物车中每个商品的信息
		//每个商品的信息，必须包括以下6个属性：
		// {goods_id, goods_name, goods_price, goods_count, goods_state， goods_small_logo}
		cart: JSON.parse(uni.getStorageSync('cart') || '[]'),
	}),
	
	mutations: {
		addToCart(state, goods) {
			const res = state.cart.find(x => x.goods_id === goods.goods_id)
			if (!res) {
				//说明购物车中没有该商品，则把该物品添加到购物车中
				state.cart.push(goods);
			} else {
				//说明购物车中存在该商品，则对该商品进行数量上的增加即可
				res.goods_count ++;
			}
			
			this.commit('m_cart/saveToStorage')
		},
		
		saveToStorage(state) {
			//将购物车数组中的数据，持久化存储到我们数据库中
			uni.setStorageSync('cart', JSON.stringify(state.cart))
		},
		
		updateGoodsState(state, goods) {
			//更新单选框的状态
			const res = state.cart.find(x => x.goods_id === goods.goods_id)
			
			if (res) {//如果找到则进行更新对应的状态
				res.goods_state = goods.goods_state
				//进行持久化的存储到本地
				this.commit('m_cart/saveToStorage')
			}
		},
		
		//修改商品的数量
		updateGoodsCount(state, goods) {
			const res = state.cart.find(x => x.goods_id == goods.goods_id)
			
			if (res) {
				res.goods_count = goods.goods_count
				
				this.commit('m_cart/saveToStorage')
			}
		},
		
		//删除购物出中的商品
		removeGoodsById(state, goods) {
			state.cart = state.cart.filter(x => x.goods_id === goods.goods_id)
			
			this.commit('m_cart/saveToStorage')
		}
	},
	
	getters: {
		total(state) {
			// let c = 0
			// state.cart.forEach(x => {
			// 	c += x.goods_count
			// })
			// return c
			//使用reduce方法进行简化
			return state.cart.reduce((total, item) => total += item.goods_count, 0)
		},
		
		checkCount(state) {
			// 先使用 filter 方法，从购物车中过滤器已勾选的商品
			  // 再使用 reduce 方法，将已勾选的商品总数量进行累加
			  // reduce() 的返回值就是已勾选的商品的总数量
			return state.cart.filter(x => x.goods_state).reduce((total, item) => total += item.goods_count, 0)
		},
		
		//计算商品的总价格
		checkGoodsAmount(state) {
			//思想：先将所有选中的商品过滤出来，然后进行累加，最后保留两位小数
			return state.cart
					.filter(x => x.goods_state)
					.reduce((total, item) => total += item.goods_count * item.goods_price, 0)
					.toFixed(2)
		}
	},
}